/*
 * (Natan)> Foi resolvido o problemade colocar um label em cima de outro (no caso o tabuleiro em cima de um peão)
 * usando o painel em camadas (JLayeredPanel)
 *
 * (Natan)> foi adicionada a classe MapeiaTabuleiro
 */
package view;

import client.controller.TabuleiroController;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.Timer;

public class TelaJogo extends javax.swing.JFrame {

    private boolean vez;
    private boolean dadoLancado;
    private int valorDado;
    private int numJogador; // número do jogador que opera o host(programa cliente)
    private TabuleiroController controlador;
    private Temporizador temporizador; // Thread para contar o tempo limite de jogada
    private DefaultListModel listaJogador;
    private JLabel[] arrayPeoes = new JLabel[16]; // vetor de peoes que guarda referencia dos peões na tela, para facilitar seleção

    /**
     * Creates new form TelaJogov2
     */
    public TelaJogo(TabuleiroController controlador, int numJogador, int tempoTemporizador) {
        initComponents();

        this.setTitle("Ludo v.1");
        this.setSize(950, 710);
        this.setLocationRelativeTo(null);
        this.controlador = controlador;
        this.numJogador = numJogador;
        temporizador = new Temporizador(tempoTemporizador, this);

        listaJogador = new DefaultListModel();
        lista_jogadores.setModel(listaJogador);

        arrayPeoes[0] = j1Peao1;
        arrayPeoes[1] = j1Peao2;
        arrayPeoes[2] = j1Peao3;
        arrayPeoes[3] = j1Peao4;
        arrayPeoes[4] = j2Peao1;
        arrayPeoes[5] = j2Peao2;
        arrayPeoes[6] = j2Peao3;
        arrayPeoes[7] = j2Peao4;
        arrayPeoes[8] = j3Peao1;
        arrayPeoes[9] = j3Peao2;
        arrayPeoes[10] = j3Peao3;
        arrayPeoes[11] = j3Peao4;
        arrayPeoes[12] = j4Peao1;
        arrayPeoes[13] = j3Peao2;
        arrayPeoes[14] = j4Peao2;
        arrayPeoes[15] = j4Peao3;

        /*  Abaixo são adicionados jogadores para Teste */
        listaJogador.addElement("Jogador 1");
        listaJogador.addElement("Jogador 2");
        listaJogador.addElement("Jogador 3");
        listaJogador.addElement("Jogador 4");
    }


    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        painelCamadasJanela = new javax.swing.JLayeredPane();
        painelStatus = new javax.swing.JPanel();
        labelStatus = new javax.swing.JLabel();
        painelOpcoes = new javax.swing.JPanel();
        lancaDado = new javax.swing.JButton();
        formaOuDesfazerCastelo = new javax.swing.JButton();
        painlRelogio = new javax.swing.JPanel();
        infTempo = new javax.swing.JLabel();
        labelMinutos = new javax.swing.JLabel();
        labelmin = new javax.swing.JLabel();
        figDado = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        lista_jogadores = new javax.swing.JList();
        jButton1 = new javax.swing.JButton();
        label_lista = new javax.swing.JLabel();
        j3Peao1 = new javax.swing.JLabel();
        j3Peao2 = new javax.swing.JLabel();
        j2Peao4 = new javax.swing.JLabel();
        j2Peao2 = new javax.swing.JLabel();
        j1Peao1 = new javax.swing.JLabel();
        j1Peao2 = new javax.swing.JLabel();
        j1Peao3 = new javax.swing.JLabel();
        j1Peao4 = new javax.swing.JLabel();
        j3Peao3 = new javax.swing.JLabel();
        j3Peao4 = new javax.swing.JLabel();
        j2Peao1 = new javax.swing.JLabel();
        j2Peao3 = new javax.swing.JLabel();
        j4Peao2 = new javax.swing.JLabel();
        j4Peao3 = new javax.swing.JLabel();
        j4Peao4 = new javax.swing.JLabel();
        j4Peao1 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setResizable(false);

        painelCamadasJanela.setBackground(java.awt.Color.white);
        painelCamadasJanela.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                painelCamadasJanelaMouseClicked(evt);
            }
        });

        painelStatus.setBackground(new java.awt.Color(231, 231, 231));
        painelStatus.setBorder(new javax.swing.border.LineBorder(java.awt.Color.gray, 2, true));

        labelStatus.setText("Status:");

        javax.swing.GroupLayout painelStatusLayout = new javax.swing.GroupLayout(painelStatus);
        painelStatus.setLayout(painelStatusLayout);
        painelStatusLayout.setHorizontalGroup(
            painelStatusLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(painelStatusLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(labelStatus, javax.swing.GroupLayout.DEFAULT_SIZE, 568, Short.MAX_VALUE)
                .addContainerGap())
        );
        painelStatusLayout.setVerticalGroup(
            painelStatusLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, painelStatusLayout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(labelStatus)
                .addContainerGap())
        );

        painelStatus.setBounds(10, 620, 592, 40);
        painelCamadasJanela.add(painelStatus, javax.swing.JLayeredPane.DEFAULT_LAYER);

        painelOpcoes.setBackground(new java.awt.Color(254, 254, 254));
        painelOpcoes.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 2, true));

        lancaDado.setText("Lançar Dado");
        lancaDado.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                lancaDadoMouseClicked(evt);
            }
        });

        formaOuDesfazerCastelo.setText("Desformar castelo");
        formaOuDesfazerCastelo.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                formaOuDesfazerCasteloMouseClicked(evt);
            }
        });

        painlRelogio.setBackground(new java.awt.Color(230, 230, 230));
        painlRelogio.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(76, 76, 76), 2, true));

        infTempo.setText("Tempo para jogar:");

        labelMinutos.setFont(new java.awt.Font("Ubuntu", 1, 25));
        labelMinutos.setText("0:00");

        labelmin.setText("min");

        javax.swing.GroupLayout painlRelogioLayout = new javax.swing.GroupLayout(painlRelogio);
        painlRelogio.setLayout(painlRelogioLayout);
        painlRelogioLayout.setHorizontalGroup(
            painlRelogioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(painlRelogioLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(painlRelogioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(labelMinutos)
                    .addComponent(infTempo))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(labelmin)
                .addContainerGap(50, Short.MAX_VALUE))
        );
        painlRelogioLayout.setVerticalGroup(
            painlRelogioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(painlRelogioLayout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addComponent(infTempo)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(painlRelogioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(labelMinutos)
                    .addComponent(labelmin))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        figDado.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/dado/6.png"))); // NOI18N

        lista_jogadores.setModel(new javax.swing.AbstractListModel() {
            String[] strings = { "jogador1" };
            public int getSize() { return strings.length; }
            public Object getElementAt(int i) { return strings[i]; }
        });
        lista_jogadores.setToolTipText("Jogadores no jogo");
        lista_jogadores.setEnabled(false);
        jScrollPane1.setViewportView(lista_jogadores);

        jButton1.setText("Iniciar partida");

        label_lista.setText("Indica espera ou vez:");

        javax.swing.GroupLayout painelOpcoesLayout = new javax.swing.GroupLayout(painelOpcoes);
        painelOpcoes.setLayout(painelOpcoesLayout);
        painelOpcoesLayout.setHorizontalGroup(
            painelOpcoesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, painelOpcoesLayout.createSequentialGroup()
                .addContainerGap(143, Short.MAX_VALUE)
                .addComponent(figDado)
                .addGap(112, 112, 112))
            .addGroup(painelOpcoesLayout.createSequentialGroup()
                .addGap(47, 47, 47)
                .addGroup(painelOpcoesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(painlRelogio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(painelOpcoesLayout.createSequentialGroup()
                        .addGap(39, 39, 39)
                        .addGroup(painelOpcoesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(lancaDado, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(formaOuDesfazerCastelo, javax.swing.GroupLayout.PREFERRED_SIZE, 164, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(painelOpcoesLayout.createSequentialGroup()
                        .addGap(57, 57, 57)
                        .addComponent(jButton1))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, painelOpcoesLayout.createSequentialGroup()
                        .addGroup(painelOpcoesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(label_lista)
                            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 178, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(20, 20, 20)))
                .addContainerGap(40, Short.MAX_VALUE))
        );
        painelOpcoesLayout.setVerticalGroup(
            painelOpcoesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, painelOpcoesLayout.createSequentialGroup()
                .addContainerGap(187, Short.MAX_VALUE)
                .addComponent(label_lista)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 91, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jButton1)
                .addGap(46, 46, 46)
                .addComponent(painlRelogio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(figDado)
                .addGap(18, 18, 18)
                .addComponent(lancaDado)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(formaOuDesfazerCastelo)
                .addGap(52, 52, 52))
        );

        painelOpcoes.setBounds(620, 10, 294, 650);
        painelCamadasJanela.add(painelOpcoes, javax.swing.JLayeredPane.DEFAULT_LAYER);

        j3Peao1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/peoes/blue-pawn-30x59.png"))); // NOI18N
        j3Peao1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                j3Peao1MouseClicked(evt);
            }
        });
        j3Peao1.setBounds(430, 400, 30, 59);
        painelCamadasJanela.add(j3Peao1, javax.swing.JLayeredPane.DEFAULT_LAYER);

        j3Peao2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/peoes/blue-pawn-30x59.png"))); // NOI18N
        j3Peao2.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                j3Peao2MouseClicked(evt);
            }
        });
        j3Peao2.setBounds(500, 400, 30, 59);
        painelCamadasJanela.add(j3Peao2, javax.swing.JLayeredPane.DEFAULT_LAYER);

        j2Peao4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/peoes/yellow-pawn-30x59.png"))); // NOI18N
        j2Peao4.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                j2Peao4MouseClicked(evt);
            }
        });
        j2Peao4.setBounds(430, 130, 30, 59);
        painelCamadasJanela.add(j2Peao4, javax.swing.JLayeredPane.DEFAULT_LAYER);

        j2Peao2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/peoes/yellow-pawn-30x59.png"))); // NOI18N
        j2Peao2.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                j2Peao2MouseClicked(evt);
            }
        });
        j2Peao2.setBounds(500, 60, 30, 59);
        painelCamadasJanela.add(j2Peao2, javax.swing.JLayeredPane.DEFAULT_LAYER);

        j1Peao1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/peoes/green-pawn-30x59.png"))); // NOI18N
        j1Peao1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                j1Peao1MouseClicked(evt);
            }
        });
        j1Peao1.setBounds(90, 60, 30, 59);
        painelCamadasJanela.add(j1Peao1, javax.swing.JLayeredPane.DEFAULT_LAYER);

        j1Peao2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/peoes/green-pawn-30x59.png"))); // NOI18N
        j1Peao2.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                j1Peao2MouseClicked(evt);
            }
        });
        j1Peao2.setBounds(160, 60, 30, 59);
        painelCamadasJanela.add(j1Peao2, javax.swing.JLayeredPane.DEFAULT_LAYER);

        j1Peao3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/peoes/green-pawn-30x59.png"))); // NOI18N
        j1Peao3.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                j1Peao3MouseClicked(evt);
            }
        });
        j1Peao3.setBounds(160, 130, 30, 59);
        painelCamadasJanela.add(j1Peao3, javax.swing.JLayeredPane.DEFAULT_LAYER);

        j1Peao4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/peoes/green-pawn-30x59.png"))); // NOI18N
        j1Peao4.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                j1Peao4MouseClicked(evt);
            }
        });
        j1Peao4.setBounds(90, 130, 30, 59);
        painelCamadasJanela.add(j1Peao4, javax.swing.JLayeredPane.DEFAULT_LAYER);

        j3Peao3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/peoes/blue-pawn-30x59.png"))); // NOI18N
        j3Peao3.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                j3Peao3MouseClicked(evt);
            }
        });
        j3Peao3.setBounds(500, 460, 30, 59);
        painelCamadasJanela.add(j3Peao3, javax.swing.JLayeredPane.DEFAULT_LAYER);

        j3Peao4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/peoes/blue-pawn-30x59.png"))); // NOI18N
        j3Peao4.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                j3Peao4MouseClicked(evt);
            }
        });
        j3Peao4.setBounds(430, 460, 30, 59);
        painelCamadasJanela.add(j3Peao4, javax.swing.JLayeredPane.DEFAULT_LAYER);

        j2Peao1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/peoes/yellow-pawn-30x59.png"))); // NOI18N
        j2Peao1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                j2Peao1MouseClicked(evt);
            }
        });
        j2Peao1.setBounds(430, 60, 30, 59);
        painelCamadasJanela.add(j2Peao1, javax.swing.JLayeredPane.DEFAULT_LAYER);

        j2Peao3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/peoes/yellow-pawn-30x59.png"))); // NOI18N
        j2Peao3.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                j2Peao3MouseClicked(evt);
            }
        });
        j2Peao3.setBounds(500, 130, 30, 59);
        painelCamadasJanela.add(j2Peao3, javax.swing.JLayeredPane.DEFAULT_LAYER);

        j4Peao2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/peoes/red-pawn-30x59.png"))); // NOI18N
        j4Peao2.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                j3Peao2MouseClicked(evt);
            }
        });
        j4Peao2.setBounds(160, 400, 30, 59);
        painelCamadasJanela.add(j4Peao2, javax.swing.JLayeredPane.DEFAULT_LAYER);

        j4Peao3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/peoes/red-pawn-30x59.png"))); // NOI18N
        j4Peao3.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                j4Peao3MouseClicked(evt);
            }
        });
        j4Peao3.setBounds(160, 460, 30, 59);
        painelCamadasJanela.add(j4Peao3, javax.swing.JLayeredPane.DEFAULT_LAYER);

        j4Peao4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/peoes/red-pawn-30x59.png"))); // NOI18N
        j4Peao4.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                j4Peao4MouseClicked(evt);
            }
        });
        j4Peao4.setBounds(90, 460, 30, 59);
        painelCamadasJanela.add(j4Peao4, javax.swing.JLayeredPane.DEFAULT_LAYER);

        j4Peao1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/peoes/red-pawn-30x59.png"))); // NOI18N
        j4Peao1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                j4Peao1MouseClicked(evt);
            }
        });
        j4Peao1.setBounds(90, 400, 30, 59);
        painelCamadasJanela.add(j4Peao1, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jLabel5.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/ludo_board-600x600.jpg"))); // NOI18N
        jLabel5.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jLabel5MouseClicked(evt);
            }
        });
        jLabel5.setBounds(10, 10, 610, 600);
        painelCamadasJanela.add(jLabel5, javax.swing.JLayeredPane.DEFAULT_LAYER);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(painelCamadasJanela, javax.swing.GroupLayout.PREFERRED_SIZE, 940, javax.swing.GroupLayout.PREFERRED_SIZE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(painelCamadasJanela, javax.swing.GroupLayout.PREFERRED_SIZE, 680, javax.swing.GroupLayout.PREFERRED_SIZE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void j1Peao1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_j1Peao1MouseClicked
        if(numJogador==1)
        cliquePeao(1); // (numero do jogador, numero do peao)
    }//GEN-LAST:event_j1Peao1MouseClicked

    private void j1Peao3MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_j1Peao3MouseClicked
        if(numJogador==1)
        cliquePeao(3);
    }//GEN-LAST:event_j1Peao3MouseClicked

    private void j1Peao2MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_j1Peao2MouseClicked
        if(numJogador==1)
        cliquePeao(2);
    }//GEN-LAST:event_j1Peao2MouseClicked

    private void j1Peao4MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_j1Peao4MouseClicked
        if(numJogador==1)
        cliquePeao(4);
    }//GEN-LAST:event_j1Peao4MouseClicked

    private void j2Peao1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_j2Peao1MouseClicked
        if(numJogador==2)
        cliquePeao(1);
    }//GEN-LAST:event_j2Peao1MouseClicked

    private void j2Peao3MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_j2Peao3MouseClicked
        if(numJogador==2)
        cliquePeao(3);
    }//GEN-LAST:event_j2Peao3MouseClicked

    private void j2Peao2MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_j2Peao2MouseClicked
        if(numJogador==2)
        cliquePeao(2);
    }//GEN-LAST:event_j2Peao2MouseClicked

    private void j2Peao4MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_j2Peao4MouseClicked
        if(numJogador==2)
        cliquePeao(4);
    }//GEN-LAST:event_j2Peao4MouseClicked

    private void j4Peao1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_j4Peao1MouseClicked
        if(numJogador==4)
        cliquePeao(1);
    }//GEN-LAST:event_j4Peao1MouseClicked

    private void j3Peao2MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_j4Peao2MouseClicked
        if(numJogador==3)
        cliquePeao(2);
    }//GEN-LAST:event_j4Peao2MouseClicked

    private void j4Peao3MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_j4Peao3MouseClicked
        if(numJogador==4)
        cliquePeao(3);
    }//GEN-LAST:event_j4Peao3MouseClicked

    private void j4Peao4MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_j4Peao4MouseClicked
        if(numJogador==4)
        cliquePeao(4);
    }//GEN-LAST:event_j4Peao4MouseClicked

    private void j3Peao1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_j3Peao1MouseClicked
        if(numJogador==3)
        cliquePeao(1);
    }//GEN-LAST:event_j3Peao1MouseClicked

    private void j4Peao2MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_j3Peao2MouseClicked
        if(numJogador==4)
        cliquePeao(2);
    }//GEN-LAST:event_j3Peao2MouseClicked

    private void j3Peao4MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_j3Peao4MouseClicked
        if(numJogador==3)
        cliquePeao(4);
    }//GEN-LAST:event_j3Peao4MouseClicked

    private void j3Peao3MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_j3Peao3MouseClicked
        if(numJogador==4)
        cliquePeao(3);
    }//GEN-LAST:event_j3Peao3MouseClicked

    private void lancaDadoMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lancaDadoMouseClicked
        valorDado = (int) (1 + (6 * Math.random())); // valor random do dado que caiu

        System.out.println(" " + valorDado);

        // gifDadoCaindo.setIcon(new ImageIcon("src/ludo_online/view/imagens/dado_caindo.gif"));
        //gifDadoCaindo.setVisible(false);

        switch (valorDado) {
            case 1:
                figDado.setIcon(new ImageIcon("src/view/imagens/dado/1.png"));
                labelStatus.setText("Status: ".concat(controlador.getStatus(1)));
                break;
            case 2:
                figDado.setIcon(new ImageIcon("src/view/imagens/dado/2.png"));
                labelStatus.setText("Status: ".concat(controlador.getStatus(2)));
                break;
            case 3:
                figDado.setIcon(new ImageIcon("src/view/imagens/dado/3.png"));
                labelStatus.setText("Status: ".concat(controlador.getStatus(3)));
                break;
            case 4:
                figDado.setIcon(new ImageIcon("src/view/imagens/dado/4.png"));
                labelStatus.setText("Status: ".concat(controlador.getStatus(4)));
                break;
            case 5:
                figDado.setIcon(new ImageIcon("src/view/imagens/dado/5.png"));
                labelStatus.setText("Status: ".concat(controlador.getStatus(5)));
                break;
            case 6:
                figDado.setIcon(new ImageIcon("src/view/imagens/dado/6.png"));
                labelStatus.setText("Status: ".concat(controlador.getStatus(6)));
                break;
        }

        dadoLancado = true;
    }//GEN-LAST:event_lancaDadoMouseClicked

    private void formaOuDesfazerCasteloMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formaOuDesfazerCasteloMouseClicked
    }//GEN-LAST:event_formaOuDesfazerCasteloMouseClicked

    private void jLabel5MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabel5MouseClicked
        System.out.println("pos >" + evt.getX() + " , " + evt.getY());
    }//GEN-LAST:event_jLabel5MouseClicked

    private void painelCamadasJanelaMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_painelCamadasJanelaMouseClicked
        //System.out.println("pos >" + evt.getX() + " , " + evt.getY());
    }//GEN-LAST:event_painelCamadasJanelaMouseClicked

    public void cliquePeao(int numPeao) {
        // apenas chama metodo de mover peão se for a vez do jogador (vez == true)
        if (vez) {
            controlador.moverPeao(numPeao, valorDado);
        }
    }

    public void moverPeao(int numJogador, int numPeao, Point posicao) {
        // <editor-fold defaultstate="collapsed" desc="Seleção do label de acordo com o jogador e o peão">
        switch (numJogador) {
            case 1:
                arrayPeoes[numPeao - 1].setLocation(posicao);
                break;

            case 2:
                arrayPeoes[numPeao + 3].setLocation(posicao);
                break;

            case 3:
                arrayPeoes[numPeao + 7].setLocation(posicao);
                break;

            case 4:
                arrayPeoes[numPeao + 11].setLocation(posicao);
                break;
        }
        // </editor-fold>
    }

    // altera a figura da label de peão para indicar castelo, de 2, 3 ou 4 peças
    public void setCasteloPeao(int numJogador, int numPeao, int nCastelo){
        // <editor-fold defaultstate="collapsed" desc="Seleção do label de acordo com o jogador e o peão">
        switch (numJogador) {
            case 1:
                painelCamadasJanela.moveToFront(arrayPeoes[numPeao - 1]); // move o label para a frente do painel em camadas
                arrayPeoes[numPeao - 1].setIcon(new ImageIcon("src/view/imagens/peoes/green-pawn-t"+nCastelo+"-30x59.png"));
                break;
            case 2:
                painelCamadasJanela.moveToFront(arrayPeoes[numPeao + 3]); // move o label para a frente do painel em camadas
                arrayPeoes[numPeao + 3].setIcon(new ImageIcon("src/view/imagens/peoes/yellow-pawn-t"+nCastelo+"-30x59.png"));
                break;

            case 3:
                painelCamadasJanela.moveToFront(arrayPeoes[numPeao + 7]); // move o label para a frente do painel em camadas
                arrayPeoes[numPeao + 7].setIcon(new ImageIcon("src/view/imagens/peoes/blue-pawn-t"+nCastelo+"-30x59.png"));
                break;

            case 4:
               painelCamadasJanela.moveToFront(arrayPeoes[numPeao + 11]); // move o label para a frente do painel em camadas
               arrayPeoes[numPeao + 11].setIcon(new ImageIcon("src/view/imagens/peoes/red-pawn-t"+nCastelo+"-30x59.png"));
                break;
        }
        // </editor-fold>
    }

    public void setJogador(String nome){
        listaJogador.addElement(nome);
    }

    // Seleciona o jogador que está jogando na JList
    public void selecionaJogadorDaVez(int numJogador){
        lista_jogadores.setSelectedIndex(numJogador);
    }

    // insere texto na label que fica sobre a lista (para indicar a espera da sala ou a vez do jogador)
    public void setTextoLabelLista(String str){
        label_lista.setText(str);
    }

    // ----------------------------------------------------------------------------
    // metodos para esconder ou mostra peões para o inicio do jogo
    // e para jogadores que não estão jogando
    public void setVisiblePeoesJogador1(boolean valor){
        j1Peao1.setVisible(valor);
        j1Peao2.setVisible(valor);
        j1Peao3.setVisible(valor);
        j1Peao4.setVisible(valor);
    }
    public void setVisiblePeoesJogador2(boolean valor){
        j2Peao1.setVisible(valor);
        j2Peao2.setVisible(valor);
        j2Peao3.setVisible(valor);
        j2Peao4.setVisible(valor);
    }
    public void setVisiblePeoesJogador3(boolean valor){
        j3Peao1.setVisible(valor);
        j3Peao2.setVisible(valor);
        j3Peao3.setVisible(valor);
        j3Peao4.setVisible(valor);
    }
    public void setVisiblePeoesJogador4(boolean valor){
        j4Peao1.setVisible(valor);
        j3Peao2.setVisible(valor);
        j4Peao2.setVisible(valor);
        j4Peao3.setVisible(valor);
    }
    // ----------------------------------------------------------------------------

    // metodo para desabilitar tela quando não for a vez do jogador
    public void desabilitarEventos() {
        lancaDado.setEnabled(false);
        formaOuDesfazerCastelo.setEnabled(false);
        vez = false;
    }

    // metodo para habilitar tela quando for a vez do jogador
    public void habilitarEventos() {
        lancaDado.setEnabled(true);
        formaOuDesfazerCastelo.setEnabled(true);
        vez = true;
    }

    // metodo para por texto na label de tempo
    public void setTempo(String tempo){
        labelMinutos.setText(tempo);
    }

    public void iniciarTemporizador() {
            temporizador.start();
    }

    // avisa ao controlador sobre o tempo esgotado para a jogada
    public void avisaTempoEsgotado() {
        controlador.tempoLimiteAlcancado();
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel figDado;
    private javax.swing.JButton formaOuDesfazerCastelo;
    private javax.swing.JLabel infTempo;
    private javax.swing.JLabel j1Peao1;
    private javax.swing.JLabel j1Peao2;
    private javax.swing.JLabel j1Peao3;
    private javax.swing.JLabel j1Peao4;
    private javax.swing.JLabel j2Peao1;
    private javax.swing.JLabel j2Peao2;
    private javax.swing.JLabel j2Peao3;
    private javax.swing.JLabel j2Peao4;
    private javax.swing.JLabel j3Peao1;
    private javax.swing.JLabel j3Peao2;
    private javax.swing.JLabel j3Peao3;
    private javax.swing.JLabel j3Peao4;
    private javax.swing.JLabel j4Peao1;
    private javax.swing.JLabel j4Peao2;
    private javax.swing.JLabel j4Peao3;
    private javax.swing.JLabel j4Peao4;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel labelMinutos;
    private javax.swing.JLabel labelStatus;
    private javax.swing.JLabel label_lista;
    private javax.swing.JLabel labelmin;
    private javax.swing.JButton lancaDado;
    private javax.swing.JList lista_jogadores;
    private javax.swing.JLayeredPane painelCamadasJanela;
    private javax.swing.JPanel painelOpcoes;
    private javax.swing.JPanel painelStatus;
    private javax.swing.JPanel painlRelogio;
    // End of variables declaration//GEN-END:variables

    // Clase interna para realizar contagem do tempo
    public class Temporizador extends Thread {

        private int seg = 0; // conta quantidade de segundos
        private int maxSeg; // valor máximo de tempo para contar (0 para contar infinitamente)
        private boolean continua = true; // indica termino (false) ou não (true) da contagem
        private TelaJogo jogo = null; // tela do jogo que se comunica com o controlador e que contem a label que exibe o tempo

        // temporizador criado para contar até o tempo limite e atualizar o JLabel passado
        public Temporizador(int tempo, TelaJogo jogo) {
            maxSeg = tempo;
            this.jogo = jogo;
        }

        // temporizador criado apenas para contar até o tempo limite
        public Temporizador(int tempo) {
            maxSeg = tempo;
        }

        // temporizador criado apenas para contar infinitamente
        public Temporizador() {
            maxSeg = 0;
        }

        // seta tempo limite
        public void setTempoLimite(int seg) {
            maxSeg = seg;
        }

        // retorna tempo em segundos
        public int getTempoSeg() {
            return seg;
        }

        // retorna tempo em minutos
        public int getTempoMin() {
            return (seg / 60);
        }

        public void zerarTempo() {
            seg = 0;
        }

        // completa string da label com zeros (para ficar uniforme)
        private String completaComZero(Integer i) {
            String retorno = null;
            if (i < 10) {
                retorno = "0" + i;
            } else {
                retorno = i.toString();
            }
            return retorno;
        }

        // indica se ainda está contando o tempo
        public boolean estaRodando(){
            return continua;
        }

        @Override
        public void run() {
            while (continua) {
                try {
                    seg++;
                    Temporizador.sleep(1000);

                    if (jogo != null) {
                        jogo.setTempo(this.getTempoMin() + ":" + completaComZero(seg % 60));
                    }

                    // caso tempo maximo seja 0 contará infinitamente

                    if (seg == maxSeg) {
                        seg = 0; // zera contador
                        continua = false;
                        if (jogo != null) {
                            jogo.avisaTempoEsgotado();
                        }
                    }

                } catch (InterruptedException ex) {
                    Logger.getLogger(TelaJogo.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    }
}
